//package com.tkmybatis.hfy.aop;
//
//import java.lang.reflect.Method;
//import java.util.Arrays;
//import java.util.List;
//
//import javax.servlet.http.HttpServletRequest;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import cn.cmcc.es.common.UserUtils;
//import cn.cmcc.es.exception.ErrorType;
//import cn.cmcc.es.exception.EsException;
//import cn.cmcc.es.feign.system.dto.PermissionDTO;
//import cn.cmcc.es.feign.system.service.SystemService;
//import cn.cmcc.es.feign.system.service.UserService;
//import cn.cmcc.es.hfy.annotation.EsPermission;
//import cn.cmcc.es.hfy.annotation.NoRequestSubmit;
//import cn.cmcc.es.hfy.base.entity.CurrentUser;
//import cn.cmcc.es.hfy.base.entity.Result;
//import cn.cmcc.es.hfy.base.enums.ResultCode;
//import cn.cmcc.es.hfy.redis.RedisUtils;
//import cn.cmcc.es.hfy.utils.HttpUtil;
//import cn.cmcc.es.hfy.utils.StringUtils;
//
///**
// * 基于权限资源拦截
// * @author vintone
// */
//@Aspect
//@Component
//public class EsPermissionAspect {
//
//	@Autowired
//	private UserService userService;
//
//	@Pointcut("@annotation(cn.cmcc.es.hfy.annotation.EsPermission)")
//	public void pointCut() {
//
//	}
//
//	@Around("pointCut()")
//	public Object around(ProceedingJoinPoint pjp) throws Throwable {
//		MethodSignature signature = (MethodSignature) pjp.getSignature();
//		Method method = signature.getMethod();
//		EsPermission esPermission = method.getAnnotation(EsPermission.class);
//		if(esPermission != null) {
//			// 有加此EsPermission注解则需要进行权限认证
//			String permissionCode = esPermission.code();
//			if(StringUtils.isNotBlank(permissionCode)) {
//				CurrentUser currentUser = UserUtils.getCurrentUser();
//				List<PermissionDTO> permissionDTOs = userService.getPermission(currentUser.getId());
//				if(!hashPermission(permissionDTOs, permissionCode)) {
//					return Result.fail(ResultCode.NO_AUTH);
//				}
//			}
//		}
//		return pjp.proceed();
//	}
//
//	/**
//	 * 判断权限是否在集合中
//	 * @param permissionDTOs
//	 * @param permissionCode
//	 * @return
//	 */
//	boolean hashPermission(List<PermissionDTO> permissionDTOs, String permissionCode) {
//		for(PermissionDTO permissionDTO : permissionDTOs) {
//			String code = permissionDTO.getPermissionCode();
//			if(StringUtils.isNotBlank(code)) {
//				List<String> codes = Arrays.asList(code.split(","));
//				if(codes.contains(code)) {
//					return true;
//				}
//			}
//		}
//		return false;
//	}
//
//}
